﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-10-8 15:53:28
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.Data.Components.Structures
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// 表格的接口。
    /// </summary>
    public interface ITable : IEnumerable<IField>
    {
        /// <summary>
        /// 获取表格名称。
        /// </summary>
        string Name { get; }

        /// <summary>
        /// 添加一列。
        /// </summary>
        /// <param name="field">列实例对象。</param>
        void AddField(IField field);

        /// <summary>
        /// 新建一列。
        /// </summary>
        /// <param name="name">列名称。</param>
        /// <param name="dataType">类型。</param>
        /// <returns>返回列实例。</returns>
        IField CreateField(string name, Type dataType);

        /// <summary>
        ///新建一列。
        /// </summary>
        /// <param name="name">列名称。</param>
        /// <param name="dataType">类型。</param>
        /// <param name="properties">列属性。</param>
        /// <returns>返回列实例。</returns>
        IField CreateField(string name, Type dataType, FieldProperties properties);

        /// <summary>
        ///新建一列。
        /// </summary>
        /// <param name="name">列名称。</param>
        /// <param name="dataType">类型。</param>
        /// <param name="size">列大小。</param>
        /// <returns>返回列实例。</returns>
        IField CreateField(string name, Type dataType, int size);

        /// <summary>
        ///新建一列。
        /// </summary>
        /// <param name="name">列名称。</param>
        /// <param name="dataType">类型。</param>
        /// <param name="size">列大小。</param>
        /// <param name="properties">列属性。</param>
        /// <returns>返回列实例。</returns>
        IField CreateField(string name, Type dataType, int size, FieldProperties properties);

        /// <summary>
        /// 查找列实例。
        /// </summary>
        /// <param name="name">列名。</param>
        /// <returns>返回列实例，如果不存在返回<c>null</c>。</returns>
        IField FindField(string name);

        /// <summary>
        /// 查找列实例。
        /// </summary>
        /// <param name="matcher">匹配调试器。</param>
        /// <returns>如果有匹配列，返回第一个匹配得到的列实例，否则返回<c>null</c>。</returns>
        IField FindField(Predicate<IField> matcher);

        /// <summary>
        /// 查找列实例。
        /// </summary>
        /// <param name="matcher">匹配调试器。</param>
        /// <returns>返回匹配的所有列。</returns>
        IList<IField> FindFields(Predicate<IField> matcher);
    }
}
